﻿/*
   Copyright 2011 Softisis

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace FOM.Interfaces
{
    /// <summary>
    /// This interface is used by condionned mapping.
    /// </summary>
    public interface ICondition
    {
        /// <summary>
        /// Method to implement. Returns true is the mapping can be applied. False otherwise.
        /// </summary>
        /// <param name="ctx">The mapping context</param>
        /// <returns></returns>
        bool CanApplyMapping(MappingContext ctx);

        /// <summary>
        /// If this property is got true, the sub path are not executed by the engine.
        /// Otehrwise, only the conditioned node if not applied, children are.
        /// </summary>
        bool IgnoreChildMappings { get; }


        ///<summary>
        /// New: for reverse capability of mapping. When called a reverse on a mapping, it will look for a reverse condition.
        ///</summary>
        ///<returns>The condition to use to reverse. If null, no condition will be used</returns>
        ICondition Reverse();
    }
}
